package com.pktechan.api.service;

import com.pktechan.api.entity.WxMp;
import com.pktechan.api.exception.CustomException;

import java.io.IOException;

/**
 * @program: cloudfloating
 * @description: 小程序相关接口
 * @author: qx.zhang
 * @create: 2021-03-08 16:28
 **/
public interface MiniProgramService {
    /**
     * 用户登录
     *
     * @param mpId 小程序mpId
     * @param code 用户小程序中获取的code
     * @return
     * @throws CustomException
     */
    String onLogin(String mpId, String code) throws CustomException;

    /**
     * 更新用户信息
     *
     * @param res            小程序中getUserInfo的响应数据
     * @param userLoginState 当前用户登录态
     * @param mpId           小程序mpId
     */
    void updateUserInfo(String res, String userLoginState, String mpId) throws CustomException;

    /**
     * 获取小程序码，适用于需要的码数量极多的业务场景。通过该接口生成的小程序码，永久有效，数量暂无限制。 更多用法详见 获取二维码。
     *
     * @param scene
     * @param page
     * @param mpId
     */
    byte[] getWxACodeUnLimit(String scene, String page, String mpId, Integer width) throws CustomException, IOException;


    /**
     * 获取小程序码，适用于需要的码数量极多的业务场景。通过该接口生成的小程序码，永久有效，数量暂无限制。 更多用法详见 获取二维码。
     *
     * @param scene
     * @param page
     * @param mpId
     */
    byte[] getWxACode(String scene, String page, String mpId) throws CustomException, IOException;

    /**
     * 通过沉默授权，仅返回openid
     *
     * @param wxMp
     * @param code
     * @return
     */
    String getBaseOpenId(WxMp wxMp, String code);
}
